<?php

/**
 * Arquivo que irá conter as regras de negócios do módulo
 * 
 * @author Alberto Medeiros
 */

module_load_include("php", "importacao", "importacao.db");

/**
 * Método que irá importar os dados dos empreendimentos
 * 
 * @return boolean
 */
function api_importacao_dados_empreendimentos(){
    
    // Setando a mensagem de importação
    drupal_set_message("Inicio importação: " . date("H:i:s"), "status");
    
    // Recuperando os empreendimento cadastrados
    $arrObjEmpreendimento = db_retorna_empreendimento();
    
    // Para cada empreendimento eu recupero as galerias, plantas e fases
    foreach($arrObjEmpreendimento as $intChave => $objEmpreendimento){
        $arrObjEmpreendimento[$intChave]->arrObjGaleria = db_get_galeria_empreendimento($objEmpreendimento->id);
        $arrObjEmpreendimento[$intChave]->arrObjPlanta  = db_get_planta_empreendimento($objEmpreendimento->id);
        $arrObjEmpreendimento[$intChave]->arrObjFases   = db_get_fases_empreendimento($objEmpreendimento->id);
    }
    
    // Cadastrando os empreendiemntos
    $intContador = api_cadastrarEmpreendimentos($arrObjEmpreendimento);
    
    // Setando a mensagem de importação
    drupal_set_message("Fim importação: " . date("H:i:s") . " Total Importados: " . $intContador, "status");
}

/**
 * Método que irá cadastrar os empreendimentos com as galerias e as plantas, também irá relacionar com as fases
 * 
 * @param Array stdClass $arrObjEmpreendimento
 */
function api_cadastrarEmpreendimentos($arrObjEmpreendimento){
    
	$intContador = 0;
	$intContadoBrreak = 1;
		
    try {
        
        foreach($arrObjEmpreendimento as $intChave => $objEmpreendimento){
            
            try {
                if(empty($objEmpreendimento->nome))
                    continue;

                // Criando o objeto notícia
                $objPost            = new stdClass();
                $objPost->title     = (string) $objEmpreendimento->nome;
                $objPost->created   = (string) REQUEST_TIME;
                $objPost->update    = (string) REQUEST_TIME;
                $objPost->type      = "empreendimento";
                $objPost->body["und"]['0']['sumary'] =  (string) $objEmpreendimento->preview;
                $objPost->body["und"]['0']['value'] =  (string) $objEmpreendimento->descricao;
                $objPost->body["und"]['0']['format'] =  'filtered_html';

                // Texto legal
                $objPost->field_texto_legal["und"]['0']['value'] =  (string) trim($objEmpreendimento->texto_legal);

                $objPost->field_listagem_descricao["und"]['0']['value'] =  (string) trim($objEmpreendimento->texto);
                $objPost->field_listagem_descricao["und"]['0']['format'] =  'filtered_html';

                $objPost->field_listagem_empreendimento["und"]['0']['value'] =  (string) trim($objEmpreendimento->diferenciais);
                $objPost->field_listagem_empreendimento["und"]['0']['format'] =  'filtered_html';

                // Setando o mapa
                $arrMapa = explode(",", $objEmpreendimento->gmaps);

                if(count($arrMapa) > 1){
                    $objPost->field_localizacao["und"][0]["fname"]          = "field-localizacao";
                    $objPost->field_localizacao["und"][0]["lat"]            = trim($arrMapa[0]);
                    $objPost->field_localizacao["und"][0]["lon"]            = trim($arrMapa[1]);
                    $objPost->field_localizacao["und"][0]["zoom"]           = "7";
                }
                // Setando o endereço
                $objPost->field_endereco["und"]['0']['value'] = (string) trim($objEmpreendimento->logradouro);

                // Setando o preview
                $objPost->field_descricao_teaser["und"]['0']['value'] = (string)  trim($objEmpreendimento->preview);

                if(!empty($objEmpreendimento->arrObjGaleria)){
                    // Salvando as imagens das perspectivas
                    foreach($objEmpreendimento->arrObjGaleria as $intChave => $objImagem){
                        $url = "C:/xampp/htdocs/qgdi_novo_site2014/arquivos_qgdi_site/emp_galeria/" . $objImagem->arquivo;

                        $filepath = drupal_realpath($url);
                        // Create managed File object and associate with Image field.
                        $file = (object) array(
                          'uid' => 1,
                          'uri' => $filepath,
                          'filemime' => file_get_mimetype($filepath),
                          'status' => 1,
						  'title' => $objImagem->descricao,
						  'alt' => $objImagem->descricao
                        );

                        // We save the file to the root of the files directory.
                        $file = file_copy($file, 'public://');

                        $objPost->field_imagens_da_perspectivas["und"][$intChave] = (array)$file;
                    }
                }


                if(!empty($objEmpreendimento->arrObjPlanta)){
                   // Salvando as plantas
                    foreach($objEmpreendimento->arrObjPlanta as $intChave => $objImagem){
                        $url = "C:/xampp/htdocs/qgdi_novo_site2014/arquivos_qgdi_site/emp_planta/" . $objImagem->arquivo;

                        $filepath = drupal_realpath($url);
                        // Create managed File object and associate with Image field.
                        $file = (object) array(
                          'uid' => 1,
                          'uri' => $filepath,
                          'filemime' => file_get_mimetype($filepath),
                          'status' => 1,
						  'title' => $objImagem->descricao,
						  'alt' => $objImagem->descricao
                        );

                        // We save the file to the root of the files directory.
                        $file = file_copy($file, 'public://');

                        $objPost->field_imagens_das_plantas["und"][$intChave] = (array)$file;
                    } 
                }


                $objPost->status = 1;
                $objPost->active = 1;
                $objPost->promote = 1;

                // Salvando o empreendimento
                node_save($objPost);

                if(!empty($objEmpreendimento->arrObjFases)){
                    cadastrarFaseEmpreendimento($objEmpreendimento, $objPost);
                }

                // Setando a mensagem de importação
                drupal_set_message($objPost->title, "status");
            } catch (Exception $exc) {
               // Setando a mensagem de importação
                drupal_set_message("Erro na importação: Empreendimento id " . $objEmpreendimento->id . " - Mensagem de erro:" . $exc->getMessage(), "eroor");
                watchdog('Importação', t($exc->getMessage()));
            }
            
			$intContador++;
        }
    } catch (Exception $exc) {
        echo $exc->getTraceAsString();
    }

    return $intContador;
    
}


function cadastrarFaseEmpreendimento($objEmpreendimento, $objPost){
    
    
    // Salvando as fases
    foreach($objEmpreendimento->arrObjFases as $intChave => $objFaseEmpreendimento){

        $objFase            =  new stdClass();
        $objFase->title     = (string) "Fase 1";
        $objFase->created   = (string) REQUEST_TIME;
        $objFase->update    = (string) REQUEST_TIME;
        $objFase->type      = "fases_do_empreendimento";
        $objFase->field_empreendimento["und"][0]["nid"]      = $objPost->nid;
        $objFase->status = 1;
        $objFase->active = 1;
        $objFase->promote = 1;

        $strData = validaDataEmpreendimento($objFaseEmpreendimento->descricao);

        // Caso a data da fase não seja encontrada pulo o empreendimento
        if(!empty($strData)){
            $objFase->field_periodo_correspondente["und"][0]["value"] = $strData . " 00:00:00";
            $objFase->field_periodo_correspondente["und"][0]["show_todate"] = "America/Sao_Paulo";
            $objFase->field_periodo_correspondente["und"][0]["date_type"] = "datetime";
        }else{
            continue;
        }

        foreach($objFaseEmpreendimento->arrObjGaleria as $intchaveImagem => $objImagem){

            $url = "C:/xampp/htdocs/qgdi_novo_site2014/arquivos_qgdi_site/emp_olhonaobra/" . $objImagem->arquivo;

            $filepath = drupal_realpath($url);
            // Create managed File object and associate with Image field.
            $file = (object) array(
              'uid' => 1,
              'uri' => $filepath,
              'filemime' => file_get_mimetype($filepath),
              'status' => 1,
			  'title' => $objImagem->descricao,
			  'alt' => $objImagem->descricao
            );

            // We save the file to the root of the files directory.
            $file = file_copy($file, 'public://');

            $objFase->field_imagens_da_fase["und"][$intchaveImagem] = (array)$file;
        }

        try {
            // Salvando a fase do empreendimento
            node_save($objFase);
        } catch (Exception $exc) {

            // Setando a mensagem de importação
            drupal_set_message("Erro na importação Fase: Empreendimento id" . $objEmpreendimento->id . " - " . $strData . " - " . $objFaseEmpreendimento->descricao, "status");
            watchdog('Importação', t($exc->getMessage()));
			
        }

    }    
}

function validaDataEmpreendimento($strData){
    
    $arrData = explode(" ", str_replace("-", "", $strData));
    
    $strDataFase = "";
    
    if(count($arrData) == 2){
        $intMes = getNumeroMes(strtolower(trim($arrData[0])));
        $strDataFase = $arrData[1] . "-" . $intMes . "-01";
        
    }else{
        if(is_numeric($arrData[1])){
            $intMes = getNumeroMes(strtolower(trim($arrData[0])));
            $strDataFase = $arrData[1] . "-" . $intMes . "-01";
        }
    }
        
    return $strDataFase;
}

function getNumeroMes($strMes){
    
    $arrMes = array("janeiro" => 1, "janeio" => 1, "fevereiro" => 2, "março" => 3, "abril" => 4, "maio" => 5, "junho" => 6,
                    "julho" => 7, "agosto" => "8", "setembro" => 9, "outubro" => 10, "novembro" => 11, "dezembro" => 12);
    
    return $arrMes[$strMes];
}

/**
 * Método que irá validar e persistir as notícias
 * 
 */
function api_importacao_dados(){
    
    // Caso o arquivo esteja vazio
    if(empty($_FILES["files"]["name"]["arquivo"])){
        drupal_set_message("Desculpe o arquivo é o brigatorio!", "error");
    }
    
    // Extensão do arquivo
    $strExtensao = "/.xml$/";
    $strNome = $_FILES["files"]["name"]["arquivo"];
    
    // Caso o arquivo não seja um xml
    if(!preg_match("/.xml$/", $_FILES["files"]["name"]["arquivo"])){
        drupal_set_message("Desculpe o arquivo não é um xml, favor exportar um arquivo do wordpresse e tentar importar novamente!", "error");
    }else{
        
        // Lendo o xml para carregar os itens
        $objImportacao = simplexml_load_file($_FILES["files"]["tmp_name"]["arquivo"]);
        
        // Recuperando os itens e setando no array
        $arrObjItem = $objImportacao->channel->item;
        
        // Contador notícias
        $intContador  = 0;
        // Realizando a interação
        foreach($arrObjItem as $intChave => $objItem):
            // Criando o objeto notícia
            $objPost            = new stdClass();
            $objPost->title     = (string)  $objItem->title;
            $objPost->created   = (string) strtotime($objItem->children('wp', true)->post_date);
            $objPost->update    = (string) strtotime($objItem->children('wp', true)->post_date);
            $objPost->type      = "not_cias";
            $objPost->body["und"]['0']['value'] =  (string) $objItem->children('content', true);
            $objPost->body["und"]['0']['format'] =  'filtered_html';
            $objPost->field_sercretaria_orgao["und"][0]["tid"] = 100;
            
            // Setando a mensagem de importação
            drupal_set_message($objPost->title, "status");
        
            
            $intChave = 0;
            $intChaveCategoria = 0;
            foreach($objItem->category as $strChaveCategoria => $objTag){
                $arrDadosCategoria = (array) $objTag;
                
                if($arrDadosCategoria["@attributes"]["domain"] == "post_tag"){
                    // Recuperando a tags
                    $strCategoria = (string) preg_replace("/[^a-zA-Z]/", "", $arrDadosCategoria["@attributes"]["nicename"]);

                    // Caso a tag seja encontrada
                    if ($term = taxonomy_get_term_by_name($strCategoria)) {
                        $objTermo = $term[key($term)];
                        $objPost->field_tags["und"][$intChave]['tid'] = $objTermo->tid;
                    } else {
                        // Caso a tag não seja encontrada crio um objeto tag e persisto no banco
                        $objTag = new stdClass();
                        $objTag->name = $strCategoria;
                        $objTag->vid = 1;
                        $objTag->description = "";
                        if (!empty($objTag->name)) {
                            try {
                                taxonomy_term_save($objTag);
                            } catch (Exception $exc) {
                                echo $exc->getMessage();
                            }


                            $tid = $objTag->tid;
                            $objPost->field_tags["und"][$intChave]['tid'] = $tid;
                        }
                    }
                    $intChaveCategoria++;
                    $intChave++;
                }else{
                    if($arrDadosCategoria["@attributes"]["nicename"] != "noticias"){
                        $strCategoria = (string) preg_replace("/[^a-zA-Z]/", "", $arrDadosCategoria["@attributes"]["nicename"]);
                        $arrTaxonomia = taxonomy_get_term_by_name(Ucfirst($strCategoria));
                        $intTid = 47;
                        foreach($arrTaxonomia as $objTaxonomia){
                            if($objTaxonomia->vid == 8)
                                $intTid = $objTaxonomia->tid;
                        }
                        if($intTid != 0)// Setando a categoria
                            $objPost->field_categoria["und"][0]["tid"] = $intTid;
                    }
                    
                }
            }
            // Salvando a notícia
            node_save($objPost);
            // Incrementando cada notícia salva
            $intContador++;
        endforeach;
          
        // Setando a mensagem de importação
        drupal_set_message("Notícias importadas com sucesso! Total importado: " . $intContador, "status");
    }
    
    
}